ADO方式读取EXCEL数据存在致命BUG!!!!!

本人适合使用VBA进行编程的网友阅读。

   

    在进行VBA编程时,为了使程序适用范围广,执行效率高,大家都喜欢使用ADO方式来读取excel文档,该方式有如下优点: 

    1、即使是当前机器上没有安装excel,也能通过ado方式读取excel文档中的数据;

      2、不用打开excel,直接调用数据,执行效率高。

 

把下面这段代码拷贝到VBA窗口,执行后会依次显示每个工作表表的名称:

Sub x()

  Dim ExcelDB As New ADODB.Connection
  Dim RS As ADODB.Recordset
  Dim S As String
 
  Set ExcelDB = New ADODB.Connection
  Set RS = New Recordset
  If Application.Version < 12 ThenExcelDB.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist SecurityInfo=False;  Data Source="&  ActiveWorkbook.FullName& ";Extended Properties='Excel 8.0;HDR=No'"
  If Application.Version >= 12 ThenExcelDB.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="& ActiveWorkbook.FullName &";Extended Properties='Excel 12.0;HDR=NO';"

  Set RS =ExcelDB.OpenSchema(adSchemaTables)
 
  Do While Not RS.EOF
        S = RS("Table_Name")
        If Left(S, 1) = "'" Then S = Mid(S, 2, Len(S) - 3) Else S = Mid(S,1, Len(S) - 1)
        MsgBox S
        RS.MoveNext
  Loop
End Sub

 

当我们高高兴兴地认为找到这么一种完美的方式读取excel数据时,我们却不知道微软已经暗中埋下夺命地雷:

如果工作表的名称中含有符号“.”则会变成“#”!!!!
比如工作表名称为:TEK-V1.0LT #7-30
通过这种ADO方式获取的名称却变为:TEK-V1#0LT #7-30

 

因此,在此郑重提醒各位,ADO读取excel数据方式有风险,使用需谨慎!


Excel必备工具箱,欢迎下载!!…